終於鼓起勇氣要報名 iThome 鐵人賽!
本系列將會陸續介紹與紀錄在使用 MongoDB 的一些心得以及雷區。MongoDB 在 2021 已經是家喻戶曉的資料庫了,網路上教學資源也很多,我會分配多一些內容在中文資源較少的部分,讓大家能夠更容易學習到更多不同面向的 MongoDB,如有錯誤或者問題請不吝指教。
我使用的環境是
要如何在這些環境使用,會簡單的說明,主軸畢竟還是在 MongoDB。
MongoDB,是 NoSQL 資料庫的一種,時至今日大部分 RDBMS 功能都有支援。剛開始的語法轉換上會是一個門檻,但更重要的是底層設計概念的不同。在維運工具方面,傳統的老牌 Oracle / MSSQL 還是有更強大的支援,不過 MongoDB 的成長性以及變革速度非常快,尤其 5.0 之後的版本釋出的步伐會更緊湊(嗯~官方是這樣宣稱的),很值得期待!
MongoDB 的特點是文件式資料儲存,這可說是相當於關聯式資料庫的一個 table,而每個文件都不需要長得一樣,具備了高度的彈性,與關聯式資料齊頭式欄位大小的概念就不同。因為允許資料格式的不同,在設計上就能有效避免多表關聯的部分(table join),減少關聯複雜度。
這邊我會避免使用 優點 是因為某些情境或使用習慣下,並不是優點反而是缺點,但輕量、彈性與便利是很具有競爭力的。
這裡使用的文件(document)是使用 BSON
格式儲存的,BSON 即為 binary json 的意思,傳統 json 支援的格式太少,透過 BSON 儲存後能夠支援相當多的資料類型,在之後會講得更細。雖然是 BSON 格式,但是呈現上與 JSON 可以說是幾乎一模一樣,如下範例。
{
"name":"movieA",
"language":"en-gb",
"rating":8,
"totalCost":30000000,
"producer":"companyA"
}
對於文件格式的規範大致上與 JSON 是一樣的,但要記得是 case sensitive
的。
要了解、使用 MongoDB 要先對術語有所了解,講錯了會被誤會是不是太少用 MongoDB。
SQL Terms | MongoDB |
---|---|
table | collection |
row(record) | document |
column | field |
join | lookup |
where | match |
select | project |
其他沒有列出來的就是術語一致,一次列出太多不僅記不起來,這東西也不是靠死背就能活用,主要還是伸手下去淌這渾水,把手弄髒才能體會。
除了一般的 document 外,還有 embedded document (或稱 nested document)
,意思是在文件內的某個欄位,再定義一層,繼剛剛上面例子。
{
"name": "movieA",
"language": "en-gb",
"rating": 8,
"totalCost": 30000000,
"producer": {
"company": "Bill Film Industry",
"pic": "Bill Fates"
}
}
不需要太擔心效能問題,因為在 embedded document 的欄位也能夠建立 index,這些在後面的章節會再陸續提到。今天就先有個初步了解即可。
本系列文章會同步發表於我個人的部落格 Pie Note